1 R yükleme

http://www.youtube.com/watch?v=XcBLEVknqvY

What is R?

1.2 RStudio

https://www.rstudio.com/

https://www.rstudio.com/products/rstudio/download/

https://moderndive.com/2-getting-started.html


1.2.1 RStudio eklentileri

  • Discover and install useful RStudio addins

https://cran.r-project.org/web/packages/addinslist/README.html

https://rstudio.github.io/rstudioaddins/

Skipping install of 'addinexamples' from a github remote, the SHA1 (fae96091) has not changed since last install.
  Use `force = TRUE` to force installation

2 R paketleri

2.1 Neden paketler var



https://blog.mitchelloharawild.com/blog/user-2018-feature-wall/


2.2 Paketleri nereden bulabiliriz


2.4 R paket yükleme

install.packages("tidyverse", dependencies = TRUE)
install.packages("jmv", dependencies = TRUE)
install.packages("questionr", dependencies = TRUE)
install.packages("Rcmdr", dependencies = TRUE)
install.packages("summarytools")

4 RStudio ile veri yükleme

https://support.rstudio.com/hc/en-us/articles/218611977-Importing-Data-with-RStudio


4.1 Excel

4.2 SPSS

4.3 csv


5 Veriyi görüntüleme

      year          month             day       
 Min.   :2013   Min.   : 1.000   Min.   : 1.00  
 1st Qu.:2013   1st Qu.: 4.000   1st Qu.: 8.00  
 Median :2013   Median : 7.000   Median :16.00  
 Mean   :2013   Mean   : 6.549   Mean   :15.71  
 3rd Qu.:2013   3rd Qu.:10.000   3rd Qu.:23.00  
 Max.   :2013   Max.   :12.000   Max.   :31.00  
                                                
    dep_time    sched_dep_time   dep_delay      
 Min.   :   1   Min.   : 106   Min.   : -43.00  
 1st Qu.: 907   1st Qu.: 906   1st Qu.:  -5.00  
 Median :1401   Median :1359   Median :  -2.00  
 Mean   :1349   Mean   :1344   Mean   :  12.64  
 3rd Qu.:1744   3rd Qu.:1729   3rd Qu.:  11.00  
 Max.   :2400   Max.   :2359   Max.   :1301.00  
 NA's   :8255                  NA's   :8255     
    arr_time    sched_arr_time   arr_delay       
 Min.   :   1   Min.   :   1   Min.   : -86.000  
 1st Qu.:1104   1st Qu.:1124   1st Qu.: -17.000  
 Median :1535   Median :1556   Median :  -5.000  
 Mean   :1502   Mean   :1536   Mean   :   6.895  
 3rd Qu.:1940   3rd Qu.:1945   3rd Qu.:  14.000  
 Max.   :2400   Max.   :2359   Max.   :1272.000  
 NA's   :8713                  NA's   :9430      
   carrier              flight       tailnum         
 Length:336776      Min.   :   1   Length:336776     
 Class :character   1st Qu.: 553   Class :character  
 Mode  :character   Median :1496   Mode  :character  
                    Mean   :1972                     
                    3rd Qu.:3465                     
                    Max.   :8500                     
                                                     
    origin              dest              air_time    
 Length:336776      Length:336776      Min.   : 20.0  
 Class :character   Class :character   1st Qu.: 82.0  
 Mode  :character   Mode  :character   Median :129.0  
                                       Mean   :150.7  
                                       3rd Qu.:192.0  
                                       Max.   :695.0  
                                       NA's   :9430   
    distance         hour           minute     
 Min.   :  17   Min.   : 1.00   Min.   : 0.00  
 1st Qu.: 502   1st Qu.: 9.00   1st Qu.: 8.00  
 Median : 872   Median :13.00   Median :29.00  
 Mean   :1040   Mean   :13.18   Mean   :26.23  
 3rd Qu.:1389   3rd Qu.:17.00   3rd Qu.:44.00  
 Max.   :4983   Max.   :23.00   Max.   :59.00  
                                               
   time_hour                  
 Min.   :2013-01-01 05:00:00  
 1st Qu.:2013-04-04 13:00:00  
 Median :2013-07-03 10:00:00  
 Mean   :2013-07-03 05:22:54  
 3rd Qu.:2013-10-01 07:00:00  
 Max.   :2013-12-31 23:00:00  
                              
View(data)
data
head
tail
glimpse
str
skimr::skim()

6 Veriyi değiştirme

6.1 Veriyi kod ile değiştirelim

6.2 Veriyi eklentilerle değiştirme


6.3 RStudio aracılığıyla recode

questionr paketi kullanılacak


https://juba.github.io/questionr/articles/recoding_addins.html




7 Basit tanımlayıcı istatistikler

summary()
mean
median
min
max
sd
table()
Parsed with column specification:
cols(
  Sepal.Length = col_double(),
  Sepal.Width = col_double(),
  Petal.Length = col_double(),
  Petal.Width = col_double(),
  Species = col_character()
)

 DESCRIPTIVES

 Descriptives                                          
 ───────────────────────────────────────────────────── 
                          Species       Sepal.Length   
 ───────────────────────────────────────────────────── 
   N                      setosa                  50   
                          versicolor              50   
                          virginica               50   
   Missing                setosa                   0   
                          versicolor               0   
                          virginica                0   
   Mean                   setosa                5.01   
                          versicolor            5.94   
                          virginica             6.59   
   Std. error mean        setosa              0.0498   
                          versicolor          0.0730   
                          virginica           0.0899   
   Median                 setosa                5.00   
                          versicolor            5.90   
                          virginica             6.50   
   Mode                   setosa                5.00   
                          versicolor            5.50   
                          virginica             6.30   
   Sum                    setosa                 250   
                          versicolor             297   
                          virginica              329   
   Standard deviation     setosa               0.352   
                          versicolor           0.516   
                          virginica            0.636   
   Variance               setosa               0.124   
                          versicolor           0.266   
                          virginica            0.404   
   Range                  setosa                1.50   
                          versicolor            2.10   
                          virginica             3.00   
   Minimum                setosa                4.30   
                          versicolor            4.90   
                          virginica             4.90   
   Maximum                setosa                5.80   
                          versicolor            7.00   
                          virginica             7.90   
   Skewness               setosa               0.120   
                          versicolor           0.105   
                          virginica            0.118   
   Std. error skewness    setosa               0.337   
                          versicolor           0.337   
                          virginica            0.337   
   Kurtosis               setosa              -0.253   
                          versicolor          -0.533   
                          virginica           0.0329   
   Std. error kurtosis    setosa               0.662   
                          versicolor           0.662   
                          virginica            0.662   
   25th percentile        setosa                4.80   
                          versicolor            5.60   
                          virginica             6.23   
   50th percentile        setosa                5.00   
                          versicolor            5.90   
                          virginica             6.50   
   75th percentile        setosa                5.20   
                          versicolor            6.30   
                          virginica             6.90   
 ───────────────────────────────────────────────────── 


7.1 summarytools

7.1.1 Frequencies

Variable: iris$Species
Type: Factor (unordered)

  Freq % Valid % Valid Cum. % Total % Total Cum.
setosa 50 33.33 33.33 33.33 33.33
versicolor 50 33.33 66.67 33.33 66.67
virginica 50 33.33 100.00 33.33 100.00
<NA> 0 0.00 100.00
Total 150 100.00 100.00 100.00 100.00
  Freq % % Cum.
setosa 50 33.33 33.33
versicolor 50 33.33 66.67
virginica 50 33.33 100.00
Total 150 100.00 100.00

7.2 Grafikler

Zorunlu paket yükleniyor: lattice
Zorunlu paket yükleniyor: ggformula

New to ggformula?  Try the tutorials: 
    learnr::run_tutorial("introduction", package = "ggformula")
    learnr::run_tutorial("refining", package = "ggformula")
Zorunlu paket yükleniyor: mosaicData
Zorunlu paket yükleniyor: Matrix

Attaching package: ‘Matrix’

The following object is masked from ‘package:tidyr’:

    expand


The 'mosaic' package masks several functions from core packages in order to add 
additional features.  The original behavior of these functions should not be affected by this.

Note: If you use the Matrix package, be sure to load it BEFORE loading mosaic.

Attaching package: ‘mosaic’

The following object is masked from ‘package:Matrix’:

    mean

The following object is masked from ‘package:questionr’:

    prop

The following objects are masked from ‘package:dplyr’:

    count, do, tally

The following object is masked from ‘package:purrr’:

    cross

The following object is masked from ‘package:ggplot2’:

    stat

The following objects are masked from ‘package:stats’:

    binom.test, cor, cor.test, cov, fivenum, IQR,
    median, prop.test, quantile, sd, t.test, var

The following objects are masked from ‘package:base’:

    max, mean, min, prod, range, sample, sum
Choose a plot type. 

1: 1-variable (histogram, density plot, etc.)
2: 2-variable (scatter, boxplot, etc.)
3: map


8 Rcmdr

library(Rcmdr)
  • A Comparative Review of the R Commander GUI for R

http://r4stats.com/articles/software-reviews/r-commander/


9 Sonraki Konular

  • RStudio ile GitHub
  • Hipotez testleri
  • R Markdown ve R Notebook ile tekrarlanabilir rapor

10 Diğer kodlar


11 Geri Bildirim


  1. Bu bir derlemedir, mümkün mertebe alıntılara referans vermeye çalıştım.

LS0tCnRpdGxlOiBSIGlsZSBhbmFsaXplIGJhxZ9sYXJrZW5eW0J1IGJpciBkZXJsZW1lZGlyLCBtw7xta8O8biBtZXJ0ZWJlIGFsxLFudMSxbGFyYSByZWZlcmFucwogIHZlcm1leWUgw6dhbMSxxZ90xLFtLl0KYXV0aG9yOiAiRGVybGV5ZW4gW1NlcmRhciBCYWxjxLEsIE1ELCBQYXRob2xvZ2lzdF0oaHR0cHM6Ly9zYmFsY2kuZ2l0aHViLmlvLykiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSlgIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGhpZ2hsaWdodDoga2F0ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRoZW1lOiBmbGF0bHkKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDUKICAgIHRvY19mbG9hdDogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogJzUnCi0tLQoKIyBSIHnDvGtsZW1lCgpodHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WGNCTEVWa25xdlkKClshW1doYXQgaXMgUj9dKGh0dHA6Ly9pbWcueW91dHViZS5jb20vdmkvWGNCTEVWa25xdlkvMC5qcGcpXShodHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WGNCTEVWa25xdlkpCgoKIyMgUi1wcm9qZWN0CgpodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy8KCi0tLQoKWyFbXShodHRwczovL2lzbWF5Yy5naXRodWIuaW8vdGFsa3MvbmVzcy1pbmZlci9pbWcvZW5naW5lLnBuZyldKGh0dHBzOi8vaXNtYXljLmdpdGh1Yi5pby90YWxrcy9uZXNzLWluZmVyL3NsaWRlX2RlY2suaHRtbCM2KQoKLS0tCgojIyBSU3R1ZGlvCgpodHRwczovL3d3dy5yc3R1ZGlvLmNvbS8KCmh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL3Byb2R1Y3RzL3JzdHVkaW8vZG93bmxvYWQvCgpodHRwczovL21vZGVybmRpdmUuY29tLzItZ2V0dGluZy1zdGFydGVkLmh0bWwKCi0tLQoKIyMjIFJTdHVkaW8gZWtsZW50aWxlcmkKCi0gRGlzY292ZXIgYW5kIGluc3RhbGwgdXNlZnVsIFJTdHVkaW8gYWRkaW5zCgpodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvYWRkaW5zbGlzdC9SRUFETUUuaHRtbAoKaHR0cHM6Ly9yc3R1ZGlvLmdpdGh1Yi5pby9yc3R1ZGlvYWRkaW5zLwoKYGBge3J9CmRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigicnN0dWRpby9hZGRpbmV4YW1wbGVzIiwgdHlwZSA9ICJzb3VyY2UiKQpgYGAKCgotLS0KCiMjIFgxMQoKaHR0cHM6Ly93d3cueHF1YXJ0ei5vcmcvCgotLS0KCiMjIEphdmEgT1MKCmh0dHBzOi8vc3VwcG9ydC5hcHBsZS5jb20va2IvZGwxNTcyCgotLS0KCiMgUiBwYWtldGxlcmkKCgojIyBOZWRlbiBwYWtldGxlciB2YXIKClshW10oaHR0cHM6Ly9pc21heWMuZ2l0aHViLmlvL3RhbGtzL25lc3MtaW5mZXIvaW1nL2FwcHN0b3JlLnBuZyldKGh0dHBzOi8vaXNtYXljLmdpdGh1Yi5pby90YWxrcy9uZXNzLWluZmVyL3NsaWRlX2RlY2suaHRtbCM3KQoKLS0tCgo8c2NyaXB0IGFzeW5jIHNyYz0iaHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzIiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+PGJsb2NrcXVvdGUgY2xhc3M9InR3aXR0ZXItdHdlZXQiIGRhdGEtbGFuZz0iZW4iPjxwIGxhbmc9ImVuIiBkaXI9Imx0ciI+SSBsb3ZlIHRoZSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2hhc2h0YWcvcnN0YXRzP3NyYz1oYXNoJmFtcDtyZWZfc3JjPXR3c3JjJTVFdGZ3Ij4jcnN0YXRzPC9hPiBjb21tdW5pdHkuPGJyPlNvbWVvbmUgaXMgbGlrZSwgJnF1b3Q7b2ggaGV5IHBlZXBzLCBJIHNhdyBhIGJpZyBuZWVkIGZvciB0aGlzIG11bmRhbmUgYnV0IGRpZmZpY3VsdCB0YXNrIHRoYXQgSSBpbmZyZXF1ZW50bHkgZG8sIHNvIEkgY3JlYXRlZCBhIHBhY2thZ2UgdGhhdCB3aWxsIGxpdGVyYWxseSBzY3JhcGUgdGhlIGxhc3QgYml0cyBvZiBwZWFudXQgYnV0dGVyIG91dCBvZiB0aGUgamFyIGZvciB5b3UuIEl0JiMzOTtzIGNhbGxlZCBwYnBseXIuJnF1b3Q7PGJyPldoYXQgYSB0cmliZS48L3A+Jm1kYXNoOyBGcmFuayBFbGF2c2t5IOG0sOG1g+G1l+G1gyDhtYLhtqbhtrvhtYPKs+G1iCAoQEZyYW5rbHlfRGF0YSkgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9GcmFua2x5X0RhdGEvc3RhdHVzLzEwMTQxODkwOTUyOTQyOTE5Njg/cmVmX3NyYz10d3NyYyU1RXRmdyI+SnVseSAzLCAyMDE4PC9hPjwvYmxvY2txdW90ZT4KCi0tLQoKCgpodHRwczovL2Jsb2cubWl0Y2hlbGxvaGFyYXdpbGQuY29tL2Jsb2cvdXNlci0yMDE4LWZlYXR1cmUtd2FsbC8KCiFbXShodHRwczovL2Jsb2cubWl0Y2hlbGxvaGFyYXdpbGQuY29tL2Jsb2cvMjAxOC0wNy0xMS11c2VyLTIwMTgtZmVhdHVyZS13YWxsX2ZpbGVzL2ZpbmFsLmpwZykKCi0tLQoKIyMgUGFrZXRsZXJpIG5lcmVkZW4gYnVsYWJpbGlyaXoKCi0gQXZhaWxhYmxlIENSQU4gUGFja2FnZXMgQnkgTmFtZQpodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvYXZhaWxhYmxlX3BhY2thZ2VzX2J5X25hbWUuaHRtbAoKLSBCaW9jb25kdWN0b3IKaHR0cHM6Ly93d3cuYmlvY29uZHVjdG9yLm9yZwoKCi0tLQoKIyMgUiBpw6dpbiB5YXJkxLFtIGJ1bG1hCgoKYGBge3IgeWFyZMSxbX0KP21lYW4KPz9lZmV0Y2gKYGBgCgoKCi0gVmlnbmV0dGUKCiFbXShmaWd1cmVzL3ZpZ25ldHRlLnBuZykKCi0tLQoKLSBSRG9jdW1lbnRhdGlvbgpodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcKCi0gUiBQYWNrYWdlIERvY3VtZW50YXRpb24KaHR0cHM6Ly9yZHJyLmlvLwoKLSBHaXRIdWIKCi0gU3RhY2tvdmVyZmxvdwoKaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS8KCi0gR29vZ2xlIHV5Z3VuIGFuYWh0YXIga2VsaW1lCgohW10oZmlndXJlcy9Hb29nbGUtcGFja2FnZS1uYW1lLnBuZykKCi0tLQoKCgohW10oZmlndXJlcy9Hb29nbGUtc3RhcnQtd2l0aC1SLnBuZykKCi0tLQoKLSBBd2Vzb21lIENoZWF0c2hlZXQKaHR0cHM6Ly9naXRodWIuY29tL2RldGFpbHlhbmcvYXdlc29tZS1jaGVhdHNoZWV0CgpodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL2RvYy9jb250cmliL0JhZ2dvdHQtcmVmY2FyZC12Mi5wZGYKCmh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL3Jlc291cmNlcy9jaGVhdHNoZWV0cy8KCgotIEF3ZXNvbWUgUgoKaHR0cHM6Ly9naXRodWIuY29tL3FpbndmL2F3ZXNvbWUtUiNyZWFkbWUKCmh0dHBzOi8vYXdlc29tZS1yLmNvbS8KCgoKCi0gVHdpdHRlcgoKaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL3JzdGF0cz9zcmM9aGFzaAoKCi0tLQoKIyMgUiBwYWtldCB5w7xrbGVtZQoKYGBgCmluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIsIGRlcGVuZGVuY2llcyA9IFRSVUUpCmluc3RhbGwucGFja2FnZXMoImptdiIsIGRlcGVuZGVuY2llcyA9IFRSVUUpCmluc3RhbGwucGFja2FnZXMoInF1ZXN0aW9uciIsIGRlcGVuZGVuY2llcyA9IFRSVUUpCmluc3RhbGwucGFja2FnZXMoIlJjbWRyIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKaW5zdGFsbC5wYWNrYWdlcygic3VtbWFyeXRvb2xzIikKYGBgCgpgYGB7ciBwYWtldCB5w7xrbGVtZX0KIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQojIGluc3RhbGwucGFja2FnZXMoImptdiIsIGRlcGVuZGVuY2llcyA9IFRSVUUpCiMgaW5zdGFsbC5wYWNrYWdlcygicXVlc3Rpb25yIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJSY21kciIsIGRlcGVuZGVuY2llcyA9IFRSVUUpCiMgaW5zdGFsbC5wYWNrYWdlcygic3VtbWFyeXRvb2xzIikKYGBgCgoKYGBge3IgcGFrZXQgw6dhxJ/EsXJtYSwgZXJyb3I9RkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBldmFsID0gVFJVRSwgaW5jbHVkZSA9IFRSVUV9CnJlcXVpcmUodGlkeXZlcnNlKQpyZXF1aXJlKGptdikKcmVxdWlyZShxdWVzdGlvbnIpCmxpYnJhcnkoc3VtbWFyeXRvb2xzKQpgYGAKCi0tLQoKIyBSIHN0dWRpbyBpbGUgcHJvamUgb2x1xZ90dXJtYQoKaHR0cHM6Ly9zdXBwb3J0LnJzdHVkaW8uY29tL2hjL2VuLXVzL2FydGljbGVzLzIwMDUyNjIwNy1Vc2luZy1Qcm9qZWN0cwoKIVtdKGh0dHA6Ly93d3cucnN0dWRpby5jb20vaW1hZ2VzL2RvY3MvcHJvamVjdHNfbmV3LnBuZykKCi0tLQoKIyBSU3R1ZGlvIGlsZSB2ZXJpIHnDvGtsZW1lCgpodHRwczovL3N1cHBvcnQucnN0dWRpby5jb20vaGMvZW4tdXMvYXJ0aWNsZXMvMjE4NjExOTc3LUltcG9ydGluZy1EYXRhLXdpdGgtUlN0dWRpbwoKIVtdKGh0dHBzOi8vc3VwcG9ydC5yc3R1ZGlvLmNvbS9oYy9lbi11cy9hcnRpY2xlX2F0dGFjaG1lbnRzLzIwNjI3NzYxOC9kYXRhLWltcG9ydC1vdmVydmlldy5naWYpCgotLS0KCiMjIEV4Y2VsCgojIyBTUFNTCgojIyBjc3YKCgotLS0KCiMgVmVyaXlpIGfDtnLDvG50w7xsZW1lCgo8c2NyaXB0IGFzeW5jIHNyYz0iaHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzIiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+PGJsb2NrcXVvdGUgY2xhc3M9InR3aXR0ZXItdHdlZXQiIGRhdGEtbGFuZz0iZW4iPjxwIGxhbmc9ImVuIiBkaXI9Imx0ciI+U3ByZWFkc2hlZXQgdXNlcnMgdXNpbmcgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL3JzdGF0cz9zcmM9aGFzaCZhbXA7cmVmX3NyYz10d3NyYyU1RXRmdyI+I3JzdGF0czwvYT46ICB3aGVyZSYjMzk7cyB0aGUgZGF0YT88YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2hhc2h0YWcvcnN0YXRzP3NyYz1oYXNoJmFtcDtyZWZfc3JjPXR3c3JjJTVFdGZ3Ij4jcnN0YXRzPC9hPiB1c2VycyB1c2luZyBzcHJlYWRzaGVldHM6ICB3aGVyZSYjMzk7cyB0aGUgY29kZT88L3A+Jm1kYXNoOyBMZW9uYXJkIEtpZWZlciAoQGxlbmtpZWZlcikgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9sZW5raWVmZXIvc3RhdHVzLzEwMTU1ODc0NzU1ODA5NTY2NzI/cmVmX3NyYz10d3NyYyU1RXRmdyI+SnVseSA3LCAyMDE4PC9hPjwvYmxvY2txdW90ZT4KCgoKYGBge3IsIHJlc3VsdHM9Im1hcmt1cCJ9CmxpYnJhcnkobnljZmxpZ2h0czEzKQpzdW1tYXJ5KGZsaWdodHMpCmBgYAoKCgpgYGAKVmlldyhkYXRhKQpgYGAKCgpgYGAKZGF0YQpgYGAKCgpgYGAKaGVhZApgYGAKCgpgYGAKdGFpbApgYGAKCgpgYGAKZ2xpbXBzZQpgYGAKCgpgYGAKc3RyCmBgYAoKCmBgYApza2ltcjo6c2tpbSgpCmBgYAoKLS0tCgojIFZlcml5aSBkZcSfacWfdGlybWUKCiMjIFZlcml5aSBrb2QgaWxlIGRlxJ9pxZ90aXJlbGltCgojIyBWZXJpeWkgZWtsZW50aWxlcmxlIGRlxJ9pxZ90aXJtZQoKIVtdKGZpZ3VyZXMvY2hhbmdlX2RhdGEucG5nKQoKLS0tCgoKIyMgUlN0dWRpbyBhcmFjxLFsxLHEn8SxeWxhIHJlY29kZQoKKnF1ZXN0aW9uciogcGFrZXRpIGt1bGxhbsSxbGFjYWsKCiFbXShmaWd1cmVzL2xldmVsX3JlY29kZS5wbmcpCgotLS0KCgoKaHR0cHM6Ly9qdWJhLmdpdGh1Yi5pby9xdWVzdGlvbnIvYXJ0aWNsZXMvcmVjb2RpbmdfYWRkaW5zLmh0bWwKCgohW10oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2p1YmEvcXVlc3Rpb25yL21hc3Rlci9yZXNvdXJjZXMvc2NyZWVuc2hvdHMvaXJlY18xLnBuZykKCgotLS0KCiFbXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vanViYS9xdWVzdGlvbnIvbWFzdGVyL3Jlc291cmNlcy9zY3JlZW5zaG90cy9pcmVjXzIucG5nKQoKCi0tLQoKIVtdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qdWJhL3F1ZXN0aW9uci9tYXN0ZXIvcmVzb3VyY2VzL3NjcmVlbnNob3RzL2lyZWNfMy5wbmcpCgoKLS0tCgojIEJhc2l0IHRhbsSxbWxhecSxY8SxIGlzdGF0aXN0aWtsZXIKCmBgYApzdW1tYXJ5KCkKYGBgCgpgYGAKbWVhbgpgYGAKCmBgYAptZWRpYW4KYGBgCgpgYGAKbWluCmBgYAoKYGBgCm1heApgYGAKCmBgYApzZApgYGAKCmBgYAp0YWJsZSgpCmBgYAoKCmBgYHtyIGRlc2NyaXB0aXZlLCBlY2hvPVRSVUUsIGluY2x1ZGUgPSBUUlVFLCBmaWcuc2hvdz0nYW5pbWF0ZScsIGFuaW9wdHM9J2NvbnRyb2xzJ30KbGlicmFyeShyZWFkcikKaXJpc2RhdGEgPC0gcmVhZF9jc3YoImRhdGEvaXJpcy5jc3YiKQoKam12OjpkZXNjcmlwdGl2ZXMoCiAgICBkYXRhID0gaXJpc2RhdGEsCiAgICB2YXJzID0gIlNlcGFsLkxlbmd0aCIsCiAgICBzcGxpdEJ5ID0gIlNwZWNpZXMiLAogICAgZnJlcSA9IFRSVUUsCiAgICBoaXN0ID0gVFJVRSwKICAgIGRlbnMgPSBUUlVFLAogICAgYmFyID0gVFJVRSwKICAgIGJveCA9IFRSVUUsCiAgICB2aW9saW4gPSBUUlVFLAogICAgZG90ID0gVFJVRSwKICAgIG1vZGUgPSBUUlVFLAogICAgc3VtID0gVFJVRSwKICAgIHNkID0gVFJVRSwKICAgIHZhcmlhbmNlID0gVFJVRSwKICAgIHJhbmdlID0gVFJVRSwKICAgIHNlID0gVFJVRSwKICAgIHNrZXcgPSBUUlVFLAogICAga3VydCA9IFRSVUUsCiAgICBxdWFydCA9IFRSVUUsCiAgICBwY0VxR3IgPSBUUlVFKQpgYGAKCi0tLQoKYGBge3Igc2NhdHRlciwgZWNobz1UUlVFLCBpbmNsdWRlPVRSVUV9CiMgaW5zdGFsbC5wYWNrYWdlcygic2NhdHIiKQoKc2NhdHI6OnNjYXQoCiAgICBkYXRhID0gaXJpc2RhdGEsCiAgICB4ID0gIlNlcGFsLkxlbmd0aCIsCiAgICB5ID0gIlNlcGFsLldpZHRoIiwKICAgIGdyb3VwID0gIlNwZWNpZXMiLAogICAgbWFyZyA9ICJkZW5zIiwKICAgIGxpbmUgPSAibGluZWFyIiwKICAgIHNlID0gVFJVRSkKCmBgYAoKIyMgc3VtbWFyeXRvb2xzCgpgYGB7ciwgaW5jbHVkZT1UUlVFLCBjb21tZW50PU5BLCBwcm9tcHQ9RkFMU0UsIGNhY2hlPUZBTFNFLCBlY2hvPVRSVUUsIHJlc3VsdHM9J2FzaXMnfQojIGxpYnJhcnkoc3VtbWFyeXRvb2xzKQpzdW1tYXJ5dG9vbHM6OmZyZXEoaXJpcyRTcGVjaWVzLCBzdHlsZSA9ICJybWFya2Rvd24iKQpgYGAKCmBgYHtyLCBpbmNsdWRlPVRSVUUsIGNvbW1lbnQ9TkEsIHByb21wdD1GQUxTRSwgY2FjaGU9RkFMU0UsIGVjaG89VFJVRSwgcmVzdWx0cz0nYXNpcyd9CmZyZXEoaXJpcyRTcGVjaWVzLCByZXBvcnQubmFzID0gRkFMU0UsIHN0eWxlID0gInJtYXJrZG93biIsIG9taXQuaGVhZGluZ3MgPSBUUlVFKQpgYGAKCgoKIyMgR3JhZmlrbGVyCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KG1vc2FpYykKbVBsb3QoaXJpc2RhdGEpCmBgYAoKCgoKCgotLS0KCiMgUmNtZHIKCmBgYApsaWJyYXJ5KFJjbWRyKQpgYGAKCgotIEEgQ29tcGFyYXRpdmUgUmV2aWV3IG9mIHRoZSBSIENvbW1hbmRlciBHVUkgZm9yIFIKCmh0dHA6Ly9yNHN0YXRzLmNvbS9hcnRpY2xlcy9zb2Z0d2FyZS1yZXZpZXdzL3ItY29tbWFuZGVyLwoKCi0tLQoKIyBTb25yYWtpIEtvbnVsYXIKCi0gUlN0dWRpbyBpbGUgR2l0SHViCi0gSGlwb3RleiB0ZXN0bGVyaQotIFIgTWFya2Rvd24gdmUgUiBOb3RlYm9vayBpbGUgdGVrcmFybGFuYWJpbGlyIHJhcG9yCgoKLS0tCgojIERpxJ9lciBrb2RsYXIKCi0gRGnEn2VyIGtvZGxhciBpw6dpbiBiYWvEsW7EsXo6IFtodHRwczovL3NiYWxjaS5naXRodWIuaW8vXShodHRwczovL3NiYWxjaS5naXRodWIuaW8vKQoKCi0tLQoKIyBHZXJpIEJpbGRpcmltCgotIEdlcmkgYmlsZGlyaW0gacOnaW4gdMSxa2xhecSxbsSxejogX1tHZXJpIGJpbGRpcmltIGZvcm11XShodHRwczovL2dvby5nbC9mb3Jtcy9ZakdaNURIZ3RQbFIxUm5CMylfCgo=